package com.zyh.websocket.service;

import com.zyh.common.utils.SecurityUtils;
import com.zyh.counselor.service.ICounselorService;
import com.zyh.websocket.constant.MessageConstant;
import com.zyh.websocket.entity.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class MessageBaseService {

    @Autowired
    private ICounselorService counselorService;

    public Message buildMessage(Message rawMessage, Long senderId) {
        return Message.builder()
                .senderId(senderId)
                .receiverId(rawMessage.getReceiverId())
                .content(rawMessage.getContent())
                .type(rawMessage.getType())
                .subType(rawMessage.getSubType())
                .routeTag(deriveRouteTag(rawMessage))
                .relatedId(rawMessage.getRelatedId())
                .isRead("0")
                .sendTime(new Date())
                .createTime(new Date())
                .delFlag("0")
                .build();
    }

    /**
     * 当消息类型是聊天消息（CHAT_MSG）时：
     * 通过counselorService检查接收者是否为咨询师
     * 是咨询师 ➔ 返回"CONSULTATION"（咨询会话标签）
     * 普通用户 ➔ 返回"USER_CHAT"（用户聊天标签）
     * 当消息类型是预约消息（APPOINTMENT_MSG）时：
     * 直接返回"APPOINTMENT"（预约标签）
     * 其他未知类型消息：
     * 默认返回"SYSTEM"（系统标签）
     *
     * @param message
     * @return
     */
    private String deriveRouteTag(Message message) {
        return switch (message.getType()) {
            case MessageConstant.CHAT_MSG -> counselorService.isCounselor(message.getReceiverId())
                    ? "CONSULTATION" : "USER_CHAT";
            case MessageConstant.APPOINTMENT_MSG -> "APPOINTMENT";
            default -> "SYSTEM";
        };
    }
}
